#include <iostream>
#include <string>
using namespace std;
const int N = 100010;
// Trie 树 插入(O(strlen))查找(O(strlen))效率高不支持删除 感觉不如unordered_map
// 如果是不用数组模拟频繁的new更慢
int son[N][26], str_count[N], index = 0;
void insert(string &str)
{
    int p = 0;
    for (int i = 0; i < str.size(); i++)
    {
        int u = str[i] - 'a';
        // 不存在就新建子节点
        if (!son[p][u])
            son[p][u] = ++index;
        p = son[p][u];
    }
    // 计数
    str_count[p]++;
}
int query(string &str)
{
    int p = 0;
    for (int i = 0; i < str.size(); i++)
    {
        int u = str[i] - 'a';
        // 不存在返回0
        if (!son[p][u])
            return 0;
        p = son[p][u];
    }
    // 返回计数
    return str_count[p];
}
int main()
{
    int m;
    cin >> m;
    // 处理 I/O
    while (m--)
    {
        char op;
        string str;
        cin >> op >> str;
        if (op == 'I')
            insert(str);
        else
            cout << query(str) << endl;
    }
    return 0;
}
